# 列表的嵌套就是在列表中存储子列表
# 一般最外层列表,我们叫做一级列表,一级列表内叫做二级列表,以此类推
school_names = [['北京大学', '清华大学'], ['南开大学', '天津大学'], ['复旦大学', '河北大学']]

# 一级列表 [['北京大学', '清华大学'], ['南开大学', '天津大学'], ['复旦大学', '河北大学']]
# 一级列表中有几个元素?3
print(len(school_names))  # 3
# 0:['北京大学', '清华大学']
# 1:['南开大学', '天津大学']
# 2:['复旦大学', '河北大学']
print('-----------------------')

# 二级列表: ['北京大学', '清华大学'] 和 ['南开大学', '天津大学'] 和  ['复旦大学', '河北大学']
# 每个2级列表中,都有2个元素, 下标分别是0,1
print(len(school_names[0]))  # 2
print(len(school_names[1]))  # 2
print(len(school_names[2]))  # 2

print('-----------------------')
# 需求1:我们如何查找到南开大学???school_names[1][0]
# 第一步: 我们先查找南开大学所在的二级列表的索引值 1
print(school_names[1])  # ['南开大学', '天津大学']
# 第二步: 我们再查找南开大学在这个二级列表中的索引值 0
print(school_names[1][0])  # 南开大学

# 需求2:获取复旦大学
print(school_names[2][0])  # 复旦大学

print('---------------------------')

# 多级列表的处理,只需要注意一件事情,就是从外向内,一级一级列表的查找,不要跨级查找,就永远不会错

# 在开发中 列表层级一般不会过多, 因为在使用列表时不方便,且遍历时需要做各种判断非常麻烦

# 如果需要遍历多级列表,需要使用循环嵌套

# 此处遍历的是一级列表,存储在临时变量中的数据是二级列表
for names in school_names:
    print(names)

print('-----------------------')
# 如果使用循环嵌套,在一级列表中再写一个对于二级列表数据的循环即可
for names in school_names:
    for name in names:
        print(name)

print('-----------------------')
# 注意: 在使用循环嵌套遍历时,要保证列表中的元素均为容器,否则会报错
school_names = [['北京大学', '清华大学'], ['南开大学', '天津大学'], ['复旦大学', '河北大学'], 1]

# TypeError: 'int' object is not iterable
# for names in school_names:
#     for name in names:
#         print(name)
